package net.xdclass.controller.stress;

import jakarta.annotation.Resource;
import net.xdclass.req.stress.StressCaseDelReq;
import net.xdclass.req.stress.StressCaseSaveReq;
import net.xdclass.req.stress.StressCaseUpdateReq;
import net.xdclass.service.stress.StressCaseService;
import net.xdclass.util.JsonData;
import org.springframework.web.bind.annotation.*;

/**
 * @author 小二
 */
@RestController
@RequestMapping("api/v1/stress_case")
public class StressCaseController {

    @Resource
    private StressCaseService stressCaseService;

    /**
     * 根据ID查找压力测试用例
     *
     * @param projectId 项目ID
     * @param caseId    测试用例ID
     * @return 包含压力测试用例信息的JsonData对象
     */
    @RequestMapping("find")
    public JsonData findById(@RequestParam("projectId") Long projectId, @RequestParam("id") Long caseId){
        return JsonData.buildSuccess(stressCaseService.findById(projectId,caseId));
    }

    /**
     * 删除压力测试用例
     *
     * @param req 包含项目ID和要删除的用例ID的请求对象
     * @return 包含删除结果信息的JsonData对象
     */
    @PostMapping("del")
    public JsonData delete(@RequestBody StressCaseDelReq req){
        return JsonData.buildSuccess(stressCaseService.delete(req.getProjectId(),req.getId()));
    }

    /**
     * 保存新的压力测试用例
     *
     * @param req 包含新用例信息的请求对象
     * @return 包含保存结果信息的JsonData对象
     */
    @PostMapping("save")
    public JsonData save(@RequestBody StressCaseSaveReq req){
        return JsonData.buildSuccess(stressCaseService.save(req));
    }

    /**
     * 更新现有的压力测试用例
     *
     * @param req 包含更新后用例信息的请求对象
     * @return 包含更新结果信息的JsonData对象
     */
    @PostMapping("update")
    public JsonData update(@RequestBody StressCaseUpdateReq req){
        return JsonData.buildSuccess(stressCaseService.update(req));
    }

    /**
     * 执行指定的压力测试用例
     *
     * @param projectId 项目ID
     * @param caseId    测试用例ID
     * @return 包含执行结果信息的JsonData对象
     */
    @GetMapping("/execute")
    public JsonData execute(@RequestParam("projectId") Long projectId,@RequestParam("id") Long caseId){
        stressCaseService.execute(projectId,caseId);
        return JsonData.buildSuccess();
    }

}
